package file.it.resource;

import java.io.*;

/**
 * 目标：使用字节流完成对文件的复制操作
 */
public class Test2 {
    public static void main(String[] args) throws Exception {
        InputStream is = null;
        OutputStream os = null;

        try {
            // 需求：复制照片, 文件; 适合拷贝一切文件
            // 1.创建一个字节输入流管道与源文件接通
            is = new FileInputStream("D:/photos/sb.jpg");

            // 2.创建一个字节输出流管道与目标文件接通
            os = new FileOutputStream("C:/data/sb.jpg");

//        1024 + 1024 + 6

            // 3.创建一个字节数组，负责转移字节数据
            byte[] buffer = new byte[1024]; // 1KB

            // 4.从字节输入流中读取字节数据，写出去到字节输出流中。读多少写出去多少
            int len; // 记住每次读取了多少字节
            while ((len = is.read(buffer)) != -1) {
                os.write(buffer, 0, len);
            }
            System.out.println("复制完成");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 释放资源的操作

//            os.close(); // 后创建的流先关掉
//            is.close(); // 先创建的流后关掉

            // 避免空指针异常
            try {
                if (os != null) os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            // 避免空指针异常
            try {
                if (is != null) is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}

